﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Data.SqlClient;

using System.Security.Cryptography;
/// <summary>
/// encrypttools 的摘要说明
/// </summary>
public class encrypttools
{
    protected static string constr = getsql.getstr("gamestr");
	public encrypttools()
	{
		//
		// TODO: 在此处添加构造函数逻辑
		//
	}
    public static readonly string myKey = "q0m3sd8l";

    #region 加密方法
    /// <summary>
    /// 加密方法
    /// </summary>
    /// <param name="pToEncrypt">需要加密字符串</param>
    /// <param name="sKey">密钥</param>
    /// <returns>加密后的字符串</returns>
    public static string Encrypt(string pToEncrypt, string sKey)
    {
        try
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            //把字符串放到byte数组中


            //原来使用的UTF8编码，我改成Unicode编码了，不行
            byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

            //建立加密对象的密钥和偏移量


            //使得输入密码必须输入英文文本
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            ret.ToString();
            return ret.ToString();
        }
        catch (Exception)
        {
            return "";
        }

    }
    #endregion

    #region 解密方法
    /// <summary>
    /// 解密方法
    /// </summary>
    /// <param name="pToDecrypt">需要解密的字符串</param>
    /// <param name="sKey">密匙</param>
    /// <returns>解密后的字符串</returns>
    public static string Decrypt(string pToDecrypt, string sKey)
    {
        try
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
            for (int x = 0; x < pToDecrypt.Length / 2; x++)
            {
                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }

            //建立加密对象的密钥和偏移量，此值重要，不能修改
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            //建立StringBuild对象，CreateDecrypt使用的是流对象，必须把解密后的文本变成流对象
            StringBuilder ret = new StringBuilder();
            return System.Text.Encoding.Default.GetString(ms.ToArray());
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
            return "";
        }

    }
    #endregion
    #region 加密解密
    public static string DecodeBase64(string code)
    {
        string decode = "";
        byte[] bytes = Convert.FromBase64String(code);  //将2进制编码转换为8位无符号整数数组. 
        try
        {
            decode = Encoding.UTF8.GetString(bytes);  //将指定字节数组中的一个字节序列解码为一个字符串。 
        }
        catch
        {
            decode = code;
        }
        return decode;
    }

    public static string EncodeBase64(string code)
    {
        string encode = "";
        byte[] bytes = Encoding.UTF8.GetBytes(code);  //将一组字符编码为一个字节序列. 
        try
        {
            encode = Convert.ToBase64String(bytes);  //将8位无符号整数数组的子集转换为其等效的,以64为基的数字编码的字符串形式. 
        }
        catch
        {
            encode = code;
        }
        return encode;
    }
    #endregion

     #region 百人房进入
    public static string roomin_mul(int roomid)
    {
        DataTable dt = get_roompart.getroom();
        DataRow[] filteredRows = dt.Select("idx=" + roomid);
        if (filteredRows.Length < 1)
        {
            return "";
        }
        string roomidx = filteredRows[0]["idx"].ToString().Trim();
        string cncip = filteredRows[0]["cncip"].ToString().Trim();
        string cncport = filteredRows[0]["cncport"].ToString().Trim();
        string videoip = filteredRows[0]["tmtip"].ToString().Trim();
        string videoport = filteredRows[0]["tmtport"].ToString().Trim();
        string servertype = "1";
        servertype = ConfigurationManager.AppSettings["servertype"];
        string serveridx = filteredRows[0]["servertypeidx"].ToString().Trim();
        if (servertype == "0")
        {
            cncip = videoip;
            cncport = videoport;
        }
        else
        {
            if (cncip == "")
            {
                cncip = videoip;
                cncport = videoport;
            }
        }
        string partstr = get_roompart.partintro(serveridx);
        partstr = HttpContext.Current.Server.UrlEncode(partstr);
      //  function += "play.aspx?roomid=" + roomid + "&t=1";//"&part=" + partstr;

        return roomidx;
    }
    #endregion
}
